﻿using System;
using System.Data;
using System.Configuration;
using System.Collections;
using System.Collections.Generic;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
using Microsoft.Practices.ObjectBuilder;
using Bovespa.Infra.Web.Security;
using Bovespa.Infra.Web.UI;
using Bovespa.Infra.ExceptionHandling;
using Bovespa.Sinacor.BaseConhecimento.Shell.Presenters;
using Bovespa.Sinacor.BaseConhecimento.Shell.ArtigoProxy;

/// <summary>
/// Classe publica de manipulacao da pagina CadastroArtigo.aspx
/// </summary>
public partial class CadastroArtigo : BovespaPage<CadastroArtigoPresenter>, ICadastroArtigo
{
    #region Campos

    #endregion

    #region Propriedades

    /// <summary>
    /// Retorna/Atribui valor para o presenter desta view.
    /// </summary>
    [CreateNew]
    public override CadastroArtigoPresenter Presenter
    {
        get { return this.BasePresenter; }
        set
        {
            this.BasePresenter = value;
            this.BasePresenter.View = this;
        }
    }

    #endregion

    #region Eventos

    /// <summary>
    /// Inicializa informacoes da CadastroArtigo, fazendo chamada ao presenter.
    /// </summary>
    /// <remarks>
    /// Este metodo e chamado automaticamente na primeira vez (apenas!) 
    /// que a CadastroArtigo e carregada.
    /// </remarks>
    protected override void InitializeView()
    {
        this.Presenter.OnViewInitialized();
    }

    /// <summary>
    /// Carrega informacoes iniciais da View e faz chamada ao presenter 
    /// </summary>
    /// <remarks>
    /// Este metodo e executado automaticamente toda vez que a CadastroArtigo (Pagina)
    /// e carregada.
    /// </remarks>
    protected override void LoadView()
    {
        this.Presenter.OnViewLoaded();

        if (!IsPostBack)
        {
            ConsultarProdutoPorHierarquia();
            ConsultarVersaoPorProduto();
        }
    }

    /// <summary>
    /// Evento executado ao clicar no botao de salvar
    /// </summary>
    protected void btnSalvar_Click(object sender, System.EventArgs e)
    {
        InserirArtigo();
    }

    /// <summary>
    /// Evento executado ao trocar opção de produto
    /// </summary>
    protected void CboProduto_SelectedIndexChanged(object sender, System.EventArgs e)
    {
        ConsultarVersaoPorProduto();
    }

    #endregion

    #region Metodos Privados

    /// <summary>
    /// Persiste uma entidade de negocio "Artigo".
    /// </summary>    
    private void InserirArtigo()
    {
        try
        {
            if (string.IsNullOrEmpty(TxtTitulo.Text))
            {
                this.ShowMessage("Erro", "O Título do Artigo é Obrigatório!");
                return;
            }

            if (CboVersao.SelectedIndex < 0)
            {
                this.ShowMessage("Erro", "A Versão do Produto é Obrigatória!");
                return;
            }

            if (string.IsNullOrEmpty(TxtSintoma.Text))
            {
                this.ShowMessage("Erro", "O Sintoma é Obrigatório!");
                return;
            }

            if (string.IsNullOrEmpty(TxtSolucao.Text))
            {
                this.ShowMessage("Erro", "A Solução é Obrigatória!");
                return;
            }

            Artigo artigo = new Artigo();
            artigo.Produto = new Produto();
            artigo.Versao = new Versao();
            artigo.Produto.Codigo = int.Parse(this.CboProduto.SelectedItem.Value);
            artigo.Versao.Codigo = int.Parse(this.CboVersao.SelectedItem.Value);
            artigo.CodigoUsuario = 2;//UsuarioHelper.ObterUsuarioHelper(Request.ServerVariables["LOGON_USER"]).UsuarioAtual.Codigo;
            artigo.NomeTitulo = this.TxtTitulo.Text;
            artigo.Sintoma = this.TxtSintoma.Text;
            artigo.Solucao = this.TxtSolucao.Text;
            
            this.Presenter.InserirArtigo(artigo);
            this.ShowMessage("Sucesso", "Artigo incluído com sucesso!");
            LimparCampos();
        }
        catch (BusinessException buEx)
        {
            this.ShowMessage(buEx);
        }
        catch (Exception ex)
        {
            throw;
        }
    }

    /// <summary>
    /// Recupera uma lista de entidades de negocio "Produto" por hierarquia.
    /// </summary>
    private void ConsultarProdutoPorHierarquia()
    {
        try
        {
            this.CboProduto.DataSource = this.Presenter.ConsultarProdutoPorHierarquia();
            CboProduto.DataTextField = "Nome";
            CboProduto.DataValueField = "Codigo";
            CboProduto.DataBind();
        }
        catch (BusinessException buEx)
        {
            this.ShowMessage(buEx);
        }
        catch (Exception ex)
        {
            throw;
        }
    }

    /// <summary>
    /// Recupera uma lista de entidades de negocio "Versao".
    /// </summary>
    private void ConsultarVersaoPorProduto()
    {
        try
        {
            this.CboVersao.DataSource = this.Presenter.ConsultarVersaoPorProduto(int.Parse(this.CboProduto.SelectedItem.Value));
            CboVersao.DataTextField = "NumeroVersao";
            CboVersao.DataValueField = "Codigo";
            CboVersao.DataBind();
        }
        catch (BusinessException buEx)
        {
            this.ShowMessage(buEx);
        }
        catch (Exception ex)
        {
            throw;
        }
    }

    /// <summary>
    /// Limpar campos da tela.
    /// </summary>
    private void LimparCampos()
    {
        TxtTitulo.Text = "";
        TxtSintoma.Text = "";
        TxtSolucao.Text = "";
        CboProduto.SelectedIndex = 0;
        CboVersao.SelectedIndex = 0;
    }

    #endregion

    #region ICadastroArtigo Members

    #endregion
}


